package com.itbaizhan.controller;

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;

@Controller
public class DownloadController {
    //查询可下载的文件
    //http://localhost:8080/showFiles
    @RequestMapping("/showFiles")
    public String showFileDown(HttpServletRequest request, Model model){
        //获取下载方件路径合集。注：跨服务器上传中，网络路径无法获取文件列表（多个文件），只能访问一个资源
        String path = request.getSession().getServletContext().getRealPath("/upload");
        File file = new File(path);
        //文件的集合
        String[] files = file.list();
        //将路径放入模型中，跳转到JSP页面
        model.addAttribute("files",files);
        return "download";
    }

    //下载文件方法
    @RequestMapping("/download")
    /*通过响应输出流，获取输出流，输出到浏览器，完成下载
    * HttpServletResponse 响应输出流  filename:从前端传过来的文件名
    * 当点击download.jsp中的a标签时，传入路径有download2?filename=${file}  这file是从上面的方法获得
     * 传入前端，再通过地址以参数的形式传入*/
    public void fileDown(HttpServletRequest request, HttpServletResponse response,String filename) throws IOException {
        //设置响应头  响应的是文件  文件名为...
        response.setHeader("Content-Disposition","attachment;filename="+filename);
        //读取文件
        String path = request.getSession().getServletContext().getRealPath("/upload");
        //说明是哪个文件
        File file = new File(path,filename);
        //获取字节输出流
        ServletOutputStream os = response.getOutputStream();
        //使用输出流写出文件  将文件转为字节数组输出
        os.write(FileUtils.readFileToByteArray(file));
        os.flush();
        os.close();
    }
}

/*String[] files = file.list(); 在jsp页面遍历数组，要引入jstl依赖
* <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-spec</artifactId>
      <version>1.2.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-impl</artifactId>
      <version>1.2.5</version>
    </dependency>*/